#if !defined(_APP_DEVICE_H)
#define _APP_DEVICE_H
#include "app_message.h"
#include "app_buffer.h"
#include <pthread.h>
// 定义设备类型
typedef enum
{
    DEV_GENERAL, // 通用设备
    DEV_SERIAL,  // 串口设备
    DEV_USB,     // USB设备
} DeviceType;
struct DeviceFuns;
// 通用设备结构体
typedef struct
{
    char *filname;            // 设备文件名
    int fd;                   // 文件描述符
    ConnectionType conn_type; // 连接类型
    DeviceType dev_type;      // 设备类型
    Buffer *read_buffer;      // 设备读缓冲区
    Buffer *write_buffer;     // 设备写缓冲区
    pthread_t read_thread;    // 设备读线程
    int running;              // 表示设备读线程是否正在运行 0:停止 1:运行
    struct DeviceFuns *funs;  // 设备相关函数
    long last_write_time;     // 上一次写入数据的时间戳
} Device;
// 包含设备相关函数（由子模块或其他模块实现）的结构体
struct DeviceFuns
{
    // 读取设备数据的后置函数
    int (*post_read)(Device *device, char *data, int len);
    // 写入设备数据的前置函数
    int (*pre_write)(Device *device, char *data, int len);
    // 发送消息
    int (*send_message)(Device *device, char *data, int len);
};

/**
 * 初始化设备
 */
Device *app_device_init(char *filname);
/**
 * 启动设备
 */
int app_device_start(Device *device);
/**
 * 停止设备
 *
 */
int app_device_stop(Device *device);
/**
 * 关闭（释放）设备
 */
void app_device_close(Device *device);
/**
 * 接受处理数据
 */
int app_device_recvMessage(Device *device, char *data, int len);
#endif // _APP_DEVICE_H